package com.fishingwithme.domain.user;

/**
 * 用户名密码登录服务接口
 * 提供用户名密码相关的用户操作
 */
public interface UsernamePasswordService {

    /**
     * 根据用户名查找用户
     * @param username 用户名
     * @return 用户信息
     */
    SpotUser loadUserByUsername(String username);

    /**
     * 注册用户
     * @param username 用户名
     * @param password 密码（明文）
     * @param email 邮箱（可选）
     * @param nickname 昵称（可选）
     * @return 创建的用户
     */
    SpotUser registerUser(String username, String password, String email, String nickname);

    /**
     * 修改密码
     * @param userId 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 是否成功
     */
    boolean changePassword(Long userId, String oldPassword, String newPassword);

    /**
     * 重置密码
     * @param username 用户名
     * @param newPassword 新密码
     * @return 是否成功
     */
    boolean resetPassword(String username, String newPassword);

    /**
     * 检查用户名是否存在
     * @param username 用户名
     * @return 是否存在
     */
    boolean existsByUsername(String username);
}